<?php
/**
 * 字段验证器
 * @author maniac
 */
namespace app\common\validate;

use app\common\model\Tables;

class Fields extends Base
{
    // 验证规则
    protected $rule = [
        'f'     => 'require|validVar|unique',
        'fname' => 'require',
    ];
    
    // 错误信息
    protected $message = [
        'f.require'  => '请输入字段标识',
        'f.validVar' => '请输入合法的字段标识',
        'fname'      => '请输入字段名称',
    ];
    
    /**
     * 验证字段值唯一性
     * @param  string $value 字段值
     * @param  string $rule  验证规则
     * @param  array  $data  所有数据
     * @param  string $key   字段名
     */
    public function unique($value, $rule, $data, $key)
    {
        $model = 'app\common\model\Fields';
        $where = [
            [$key, 'eq', $value],
            ['id', 'neq', $data['id']],
            ['tbname', 'eq', $data['tbname']],
        ];
        $info  = $model::field('id')->where($where)->find();
        if ($info) {
            return '字段已存在';
        } else {
            $map    = config('db_map.');
            $tables = Tables::field('id')->where('tbname', $data['tbname'])->find();
            // 主表
            if (isset($map[$data['tbname']]['main_model'])) {
                $mainTbl = $map[$data['tbname']]['main_model'];
            } elseif ($tables) {
                $mainTbl = 'contents';
            } else {
                $mainTbl = '';
            }
            if ($mainTbl) {
                $mainFields = get_fields($mainTbl);
                if (in_array($value, $mainFields)) {
                    return '字段已存在';
                }
            }
        }
        return true;
    }
}
